package eteam.aps.service;

import eteam.aps.common.helper.JsonPage;
import eteam.aps.model.dto.SaleOrderQueryDto;
import eteam.aps.model.dto.SalesOrderUpdateDto;
import eteam.aps.model.entity.SalesOrder;
import eteam.aps.model.entity.other.SalesOrderBody;
import eteam.aps.model.entity.other.SalesOrderSave;
import eteam.aps.model.vo.sale.SaleOrderScanDto;
import eteam.aps.model.vo.sales_order.SalesOrderShow;
import eteam.aps.model.vo.sales_order.SalesOrderVo;

import java.util.List;
import java.util.Map;

/**
 * 销售订单 业务层
 *
 * @author LiuLei
 */
public interface SalesOrderService {

    /**
     * 保存客户订单
     *
     * @param salesOrderSave 订单信息
     * @return 增加的条数
     * @throws Exception 异常
     */
    int saveCustomerOrder(SalesOrderSave salesOrderSave) throws Exception;

    /**
     * 分页查询订单信息
     *
     * @param saleOrderQueryDto 查询条件
     * @return 订单信息
     */
    JsonPage<SalesOrderVo> getSalesOrderByQuery(SaleOrderQueryDto saleOrderQueryDto);

    /**
     * 根据单号查询订单信息
     *
     * @param scan 单号
     * @return 订单信息
     */
    List<SalesOrder> scanSalesOrder(String scan) throws Exception;

    /**
     * 保存订单信息
     *
     * @param map 蚕食
     * @return tradeid
     * @throws Exception 异常
     */
    String addDelivery(Map<String, Object> map) throws Exception;


//    /**
//     * 根据单号扫描 单号信息
//     *
//     * @param scan 产品编号
//     * @param scan 订单编号
//     *
//     * @return 扫描的条数
//     */
//    MocoRdersSaleVo scanProductNum(String saleOrder, String scan) throws Exception;
//
    /**
     * @since 2025/05/20
     */
    void scanProductNum(SaleOrderScanDto scan) throws Exception;

    /**
     * 根据内码查询单据信息
     *
     * @param fId 内码
     * @return 单据信息
     */
    SalesOrderShow selSalesOrderByFId(String fId);

    /**
     * 修改单据信息
     *
     * @param salesOrderUpdateDto 单据实体
     * @return 单据信息
     */
    int updateSalesOrderByFId(SalesOrderUpdateDto salesOrderUpdateDto) throws Exception;

    /**
     * 根据产品编号修改 产品状态
     *
     * @param bar 产品编号
     * @return 修改的条数
     */
    int updateProductNumType(String bar) throws Exception;

    /**
     * 根据订单编号获取订单信息 （本地去重）
     *
     * @param orderCode 订单编号
     * @return 订单
     */
    SalesOrderSave getCustomerByOrderCode(String orderCode) throws Exception;

    /**
     * 删除订单信息
     *
     * @param fId 内码
     * @return 删除条数
     */
    Integer delBySalesOrderByFId(String fId);

    /**
     * @param invCode 物料编号
     * @return 返回物料信息
     */
    SalesOrderBody getInvByInvCode(String invCode);
}
